package TCP;


import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.DefaultCaret;

public class Day11_Client {//主类开始
    //1.底层框架
    JFrame jFrame = new JFrame();
    //2.显示区域
    JTextArea jTextArea = new JTextArea();
    //3.输入框
    JTextField jTextField = new JTextField();
    //4.按钮
    JButton jButton = new JButton("发送");
    //5.滚动效果
    JScrollPane jScrollPane =
            new JScrollPane(jTextArea);

    //5.创建实体类对象
    Studnent studnent = null;

    //6.创建Socket顶点
    Socket socket = null;
    //7.OutputStream
    //OutputStream outputStream = null;
    //8.服务器的ip地址
    String ip = "192.168.202.140";
    //9.端口号
    int port = 8888;
    //10.判断客户端是否第一次给服务器发信息
    boolean first = true;


    //自己创建一个方法来实现界面初始化功能
    public void init_window(){//界面初始化开始
        //消除底层框架的默认布局
        jFrame.setLayout(null);
        //显示底层框架
        jFrame.setVisible(true);
        //设置底层框架的方位和大小
        jFrame.setBounds(400, 400, 900, 700);
        //设置标题
        jFrame.setTitle("客户端");



        //设置显示区域的方位大小
        jScrollPane.setBounds(100, 50, 500, 400);

        Font font =
                new Font("宋体", Font.BOLD, 30);
        jTextArea.setFont(font);

        jScrollPane.
                setVerticalScrollBarPolicy
                        (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        //自动显示文字在最底部
        DefaultCaret defaultCaret =
                (DefaultCaret)
                        jTextArea.getCaret();

        defaultCaret.setUpdatePolicy
                (DefaultCaret.ALWAYS_UPDATE);

        //把显示区域添加进底层框架
        jFrame.add(jScrollPane);
        //设置显示区域不可编辑
        jTextArea.setEditable(false);

        //设置输入框的方位大小
        jTextField.setBounds(100, 500, 200, 50);
        //把输入框添加进底层框架
        jFrame.add(jTextField);
        //设置按钮的方位大小
        jButton.setBounds(320, 500, 80, 50);
        //把按钮添加进底层框架
        jFrame.add(jButton);

        //找到按钮，触发事件，实现功能
        jButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                //功能
                //获取输入框的内容
                String info = jTextField.getText().toString();
                //把输入框的内容清空
                jTextField.setText("");
                //把内容贴入显示区域
                jTextArea.append("我说："+info+"\n");

                //把输入框的内容发送给服务器
                send(info);

                //启动线程
                ThreadClient threadClient =
                        new ThreadClient(socket);
                threadClient.start();

            }
        });




    }//界面初始化结束

    //创建用户名
    public void init_student(){//创建用户名开始
        //输入姓名从控制台输入
        Scanner scanner =
                new Scanner(System.in);
        System.out.print("请输入姓名：");
        //获取字符串
        String name = scanner.nextLine();
        //通过实体类存储输入的姓名
        studnent = new Studnent(name);

    }//创建用户名结束

    //数据传输（创建一个send方法来实现）
    public void send(String info){//数据传输开始
        //发送数据（输出流）
        try {
            OutputStream	outputStream = socket.getOutputStream();
            if (first) {
                outputStream.write
                        ((info+'\n').getBytes());
                first = false;
            }else {
                outputStream.write
                        ((studnent.getName()+"说："+info+'\n').
                                getBytes());
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }//数据传输结束



    public static void main(String[] args) {//主函数开始

        Day11_Client client = new Day11_Client();

        client.init_student();
        //连接服务器
        try {
            client.socket =
                    new Socket(client.ip, client.port);

            client.send(
                    client.studnent.getName()
                            +"加入聊天室，大家欢迎！");


        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        client.init_window();

    }//主函数结束

    //用内部类来接收数据
    class ThreadClient extends Thread{
        Socket socket;
        public ThreadClient(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {

            //while (true) {

            try {
                InputStream inputStream =
                        socket.getInputStream();
                byte[] array = new byte[1024];
                int len;
                String string;

                while ((len=inputStream.read(array))!=-1) {
                    string = new String
                            (array, 0, len);
                    jTextArea.append(string);
                }




            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }






            //}



            // TODO Auto-generated method stub
            //super.run();

        }
    }





}//主类结束



